package service

import (
	"ginApi/comm"
	"ginApi/dao"
	"ginApi/model"
)

type TokenService interface {
	Insert(userId uint, userType int) *model.Token
	GetToken(token string) *model.Token
	GetTokenById(userId uint) *model.Token
	DeleteToken(token string) *comm.Err
}

type tokenService struct {
	dao *dao.TokenDao
}

func NewTokenService() TokenService {
	return &tokenService{
		dao: dao.NewTokenDao(),
	}
}

func (s *tokenService) Insert(userId uint, userType int) *model.Token {
	uuid, _ := comm.NewUUID()
	return s.dao.InsertToken(comm.CreateSign(uuid), userId, userType)
}

func (s *tokenService) GetToken(token string) *model.Token {
	return s.dao.FindByToken(token)
}

func (s *tokenService) GetTokenById(userId uint) *model.Token {
	return s.dao.FindByUserId(userId)
}

func (s *tokenService) DeleteToken(token string) (err *comm.Err) {
	entity := s.dao.FindByToken(token)
	if entity == nil {
		return comm.NewError(comm.ErrorNotExist, "token不存在")
	}

	s.dao.DeleteToken(token)
	return nil
}
